AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte [IDE-Experte (2006,07,09,10,XE,XE2)] CustomHelp
Thema durchsuchen
Ansicht
Themen-Optionen

[IDE-Experte (2006,07,09,10,XE,XE2)] CustomHelp

Ein Thema von chaosben · begonnen am 29. Sep 2009 · letzter Beitrag vom 8. Jan 2014
Antwort Antwort
Seite 2 von 10     12 34     Letzte »    
Benutzerbild von MarcoWarm
MarcoWarm

Registriert seit: 10. Sep 2003
Ort: Großhennersdorf
532 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

Re: [IDE-Experte] CustomHelp

  Alt 1. Okt 2009, 10:39
Hi Andre...

danke daß Sie sich für dieses Produkt entschieden haben

vielen Dank für die Anregungen.

Zu
Punkt1 ... Über die Reihenfolge hab ich auch lange nachgedacht... wie man's macht ist es irgendwie falsch
Punkt2 ... Da hast du vollkommen recht kommt noch rein.
Punkt3 ... komisch !DefaultKeywordIndex sollte eigentlich in jeder Hilfe dabei sein. Noch hab ich nicht herausgefunden, wie ich die NavDataMoniker auslesen kann geschweige denn, wie ich herausfinde welcher der Default ist ... *kopfschüttel* . Vielleicht hast du eine Idee. Es muss irgendwie gehen. Du kannst dir die verfügbaren Moniker mit diesem Tool anschauen

Vorschlag zu der Sortierung... man könnte die Resultate auch in einer CategoryButton-Komponente anzeigen (wie die Komponentenpalette) mit ein wenig owner draw

Gruß
Marco
Marco Warm
TUO
TheUnknownOnes.net
  Mit Zitat antworten Zitat
a-s-z-work

Registriert seit: 23. Feb 2009
8 Beiträge
 
RAD-Studio 2009 Ent
 
#2

Re: [IDE-Experte] CustomHelp

  Alt 1. Okt 2009, 12:36
Hi,

Zitat von MarcoWarm:
Punkt3 ... komisch !DefaultKeywordIndex sollte eigentlich in jeder Hilfe dabei sein. Noch hab ich nicht herausgefunden, wie ich die NavDataMoniker auslesen kann geschweige denn, wie ich herausfinde welcher der Default ist ... *kopfschüttel* . Vielleicht hast du eine Idee. Es muss irgendwie gehen. Du kannst dir die verfügbaren Moniker mit diesem Tool anschauen
Ich hab mal nachgesehen, und der zeigt im Dropdown bei Index vier Einträge an, allerdings ist die Listbox immer leer
Dei DevExpress-Hilfe ist zusätzlich als Plugin in der Embarcadero-Hilfe integriert. In diesem Index tauchen auch viele Keywords auf, die allerdings anscheinend nicht zu dem passen, was als HelpString übergeben wird (z.B. cxEdit.TcxCustomEdit.EditValue)
Wird nur EditValue übergeben, findet er einige Einträge.

Ach übrigens: Zu TObject (wird aufgelöst zu System.TObject) findet er auch nix Aber das ist denke ich nicht der Fehler von CustomHelp ... zu TObject direkt wird was gefunden.
Na dann erweitere ich mal die Suche, so das zusätzlich der letzte Teil nach dem Punkt gesucht wird, wenn sonst keine Namespace-Treffer vorhanden sind, oder so ... (Quelltext siehe unten)

Zitat von MarcoWarm:
Vorschlag zu der Sortierung... man könnte die Resultate auch in einer CategoryButton-Komponente anzeigen (wie die Komponentenpalette) mit ein wenig owner draw
Mir reicht die einfache Liste, es ging mir nur darum als Standard den Eintrag aus der lokalen Hilfe ausgewählt zu haben (wenn denn was gefunden wurde)
Hier mal der Code, mit dem ich die Auswahl momentan aufbaue:
Delphi-Quellcode:
function TMyViewer.GetHelpStrings(const HelpString: String): TStringList;
var
  idx: Integer;
  c, d, u : String;
  o, order : Integer;
  Index : IHxIndex;
  Topics : IHxTopicList;
  slot : integer;
  HelpStringPart: string;

  function EncodedHelpString: String;
  var
    i: integer;
  begin
    Result:='';
    for i := 1 to Length(HelpString)do
      Result:=Result + '%'+Format('%.2x', [Ord(HelpString[i])]);
  end;

  procedure CheckHelpString(const HelpString: string);
  var
    idy: Integer;
  begin
    slot := Index.GetSlotFromString(HelpString);
    if AnsiContainsText(Index.GetStringFromSlot(slot), HelpString) then
    begin
      Topics := Index.GetTopicsFromSlot(slot);
      for idy := 1 to Topics.Count do
      begin
        inc(order);
        Result.Add(TCustomHelp.EncodeURL(Topics.Item(idy).Title[HxTopicGetRLTitle, 0],
                                         Topics.Item(idy).Location,
                                         Topics.Item(idy).URL, order));
      end;
    end;
  end;
begin
  //Weil wir bei UnderstandsKeyword gesagt haben, das wir das Keyword verstehen (Result = 1)
  //werden wir jetzt gefragt, welche Hilfethemen wir zu diesem Keyword liefern können
  //Die StringList wird vom Hilfesystem wieder freigegeben

  Result := TStringList.Create;
  HelpStringPart := HelpString;
  repeat
    idx := Pos('.', HelpStringPart);
    Delete(HelpStringPart, 1, idx);
  until idx < 1;

  order := 0;

  //Und jetzt noch die eigentlichen Hilfe-Namespaces durchsuchen
  for idx := 0 to GlobalCustomHelp.EnabledIndices.Count-1 do
  begin
    if supports(GlobalCustomHelp.EnabledIndices[idx], IHxIndex, Index) then
    begin
      CheckHelpString(HelpString);
    end;
  end;

  if order = 0 then
    for idx := 0 to GlobalCustomHelp.EnabledIndices.Count-1 do
    begin
      if supports(GlobalCustomHelp.EnabledIndices[idx], IHxIndex, Index) then
      begin
        CheckHelpString(HelpStringPart);
      end;
    end;

  for idx := 0 to GlobalCustomHelp.ProviderList.Count - 1 do
  begin
    TCustomHelp.DecodeURL(GlobalCustomHelp.ProviderList.Strings[idx], c, d, u, o);

    if Pos('://', u)>0 then
    begin
      inc(order);
      Result.Add(TCustomHelp.EncodeURL(c,d,u+EncodedHelpString, order))
    end
    else
    if AnsiSameText(ExtractFileExt(u),'.hlp') then
    begin
      inc(order);
      Result.Add(TCustomHelp.EncodeURL(c,d,'winhlp://-k '+HelpString+' '+u, order));
    end
    else
    if AnsiSameText(ExtractFileExt(u),'.chm') then
    begin
      inc(order);
      Result.Add(TCustomHelp.EncodeURL(c,d,'htmlhlp://'+HelpString+URL_SPLITTER+u, order));
    end;
  end;

end;
Am Ende von TMyViewer.ShowHelp habe ich noch folgendes angepasst, damit man keine Endlosschleife bekommt wenn man die Auswahl abbricht:
Delphi-Quellcode:
  else if HelpString <> 'then
    ShowHelp(ForceSelector(HelpString));
Außerdem habe ich mir den Selector angepasst, das der HelpString in der Caption angezeigt wird. Da wundert man sich doch, was man so als Suchbegriff übergeben bekommt.
Probleme hab ich im Moment z.B. noch, wenn ich eine fehlerhafte Anweisung abfrage. Da bekomme ich als HelpString "erroneous type" übergeben!? Besser wäre natürlich der selektierte Text

Teilweise bekomme ich noch Fehler in PasHelp.TestKeyword. Das scheint mit dem Kibitz-Feature zusammenzuhängen, und tritt nur auf, wenn die CustomHelp.bpl neu geladen wird. Ist also nicht so wichtig.

PS: In der Projektdatei fehlt noch die Unit uMSHelpServices.pas.
Andre
CU,
Andre
  Mit Zitat antworten Zitat
Benutzerbild von MarcoWarm
MarcoWarm

Registriert seit: 10. Sep 2003
Ort: Großhennersdorf
532 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

Re: [IDE-Experte] CustomHelp

  Alt 1. Okt 2009, 12:53
Hmmmmmm.... mit langem (m)

Das mit dem "erroneous type" ist typisch RAD Studio 2009+. In der BDS2006 klappt das Prima. Da bekomm ich auch keinen Namespace des Objektes.
Wenn du das mit dem selektierten Text hinbekommst wäre ich natürlich dankbar .

Ich werde das mit dem Punkt im Helptext mal berücksichtigen.
Marco Warm
TUO
TheUnknownOnes.net
  Mit Zitat antworten Zitat
Benutzerbild von MarcoWarm
MarcoWarm

Registriert seit: 10. Sep 2003
Ort: Großhennersdorf
532 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: [IDE-Experte] CustomHelp

  Alt 1. Okt 2009, 13:34
Neue Version... neues Glück


edit: Kleiner Tipp, die Auswahlbox merkt sich die geschlossenen Rubriken, sodaß weniger häufig benutzte "Handbücher" zugeschlagen bleiben
edit2: der Fehler mit dem "erroneous type" wird wirklich von Delphi verursacht. Sobald das Keyword innherhalb einer Methode oder Funktion abgefragt wird kommt auf jedes unbekannte Schlüsselwort dieses Keyword zurück. außerhalb von begin...end klappt es jedoch (obwohl es da genauso unbekannt sein dürfte.)
Marco Warm
TUO
TheUnknownOnes.net
  Mit Zitat antworten Zitat
Benutzerbild von MarcoWarm
MarcoWarm

Registriert seit: 10. Sep 2003
Ort: Großhennersdorf
532 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

Re: [IDE-Experte] CustomHelp

  Alt 2. Okt 2009, 08:21
Und noch eine Release vorm Wochenende
  • optionale Volltextsuche, die ist wahrscheinlich nicht besonders hilfreich, weil da seeeeehr viele Ergebnisse zurückkommen. Aber probierts ruhig aus.
  • Anzeige des gesuchten Begriffes im Hilfefenster.
Marco Warm
TUO
TheUnknownOnes.net
  Mit Zitat antworten Zitat
3. Okt 2009, 08:29
Dieses Thema wurde von "mkinzler" von "Tools rund um Delphi" nach "Open-Source" verschoben.
Liegt im Source vor
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#7

Re: [IDE-Experte] CustomHelp

  Alt 3. Okt 2009, 22:26
Zitat von a-s-z-work:
  • function THelpSelector.SelectKeyword:
    in der ersten Zeile sollte nicht idx, sondern Result initialisiert werden. Sonst gibt es einen Fehler wenn man die Auswahl abbricht.
    Delphi-Quellcode:
    function THelpSelector.SelectKeyword(Keywords: TStrings): Integer;
    var
      idx : integer;
      u : String;
    begin
      Result:=-1;
      if TFormHelpSelector.Execute(Keywords, idx, u) then
        Result:=idx;
    end;
Also ich würde da auf idx komplett verzichten und statt idx Result übergeben.
Wobei ich nicht weiß, ob idx bzw. Result -1 ist, wenn Execute false zurückgibt. Ansonsten (failsave):
Delphi-Quellcode:
function THelpSelector.SelectKeyword(Keywords: TStrings): Integer;
var
  u : String;
begin
  if not TFormHelpSelector.Execute(Keywords, Result, u) then
    Result := -1;
end;
Ansonsten sieht das gut aus, und eventuell teste ich das noch heute/morgen.

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
a-s-z-work

Registriert seit: 23. Feb 2009
8 Beiträge
 
RAD-Studio 2009 Ent
 
#8

Re: [IDE-Experte] CustomHelp

  Alt 5. Okt 2009, 08:27
Hi Marco,

Zitat von MarcoWarm:
edit2: der Fehler mit dem "erroneous type" wird wirklich von Delphi verursacht. Sobald das Keyword innherhalb einer Methode oder Funktion abgefragt wird kommt auf jedes unbekannte Schlüsselwort dieses Keyword zurück. außerhalb von begin...end klappt es jedoch (obwohl es da genauso unbekannt sein dürfte.)
Ich habe eine Lösung für das Problem gefunden. Man muss genau diesen Begriff ignorieren, dann fragt die Hilfe anschließend den selektierten Text ab ...

Delphi-Quellcode:
function TMyViewer.UnderstandsKeyword(const HelpString: String): Integer;
var
  hs : IHelpSystem;
begin
  //Das Hilfesystem fragt uns: Verstehst du dieses Keyword (der Begriff unter dem Cursor)?

  if HelpString = 'erroneous typethen
  begin
    Result := 0;
    Exit;
  end;

  Result := 1; //ja!

  if GetHelpSystem(hs) then
  begin
    //Noch schnell dem Hilfesystem sagen, das wir einen eigenen Auswahldialog für die
    //verschiedenen Hilfethemen haben
    hs.AssignHelpSelector(THelpSelector.Create(HelpString));
  end;
end;
Andre
CU,
Andre
  Mit Zitat antworten Zitat
Benutzerbild von MarcoWarm
MarcoWarm

Registriert seit: 10. Sep 2003
Ort: Großhennersdorf
532 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9

Re: [IDE-Experte] CustomHelp

  Alt 5. Okt 2009, 08:32
Hi Andre,

vieeeelen Dank. Jetzt klappt's super. Die Änderung ist auch schon im Repository.

So macht 'ne Community echt Spaß

schönen Tag noch

Gruß Marco
Marco Warm
TUO
TheUnknownOnes.net
  Mit Zitat antworten Zitat
a-s-z-work

Registriert seit: 23. Feb 2009
8 Beiträge
 
RAD-Studio 2009 Ent
 
#10

Re: [IDE-Experte] CustomHelp

  Alt 5. Okt 2009, 12:51
Hallo Marco,

anbei habe ich mal meine Änderungen als Patch (Stand R337) zusammengefasst.
  • Projekteigenschaften für Debugging / StackTrace in der IDE angepasst
  • Neue Option: Nur den ersten "Namespace" abschneiden. ansonsten werden nach und nach alle Teile abgeschnitten und gesucht (solange keine Treffer gefunden wurden).
  • Fehlerbehandlung in der Suche: Aufgetretene Fehler werden im Auswahldialog angezeigt (Momentan gibt es einen Memory Leak, wenn eine Exception in GetHelpStrings auftritt).
  • Standardeinträge (Search engines) werden unten in der Ergebnisliste angezeigt.
  • Der erste gefundene Eintrag wird automatisch selektiert.
  • Anzeige des evtl. verkürzten Suchbegriffes

Vielleicht ist ja das ein oder andere für dich dabei.
Angehängte Dateien
Dateityp: txt customhelp-rev337.patch_939.txt (31,8 KB, 14x aufgerufen)
Andre
CU,
Andre
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 10     12 34     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz